﻿Public Class TMyDatabaseList
    Implements System.IDisposable

    Private _Conn As TMySession
    Private _List As New List(Of TMyDatabase)
    Private _SQL As New TMyQuery

    Public ReadOnly Property HostName() As String
        Get
            Return _Conn.HostName
        End Get
    End Property

    Public ReadOnly Property Count() As Integer
        Get
            Return _List.Count
        End Get
    End Property

    Default Public ReadOnly Property Database(ByVal Index As Integer) As TMyDatabase
        Get
            Return _List(Index)
        End Get
    End Property

    Public Sub New(ByVal AConnection As TMySession)
        _Conn = AConnection
        _SQL.Session = AConnection
        Me.Refresh()
    End Sub

    Private Sub Refresh()
        _SQL.Clear()
        _SQL.SQL.AppendLine("SELECT")
        _SQL.SQL.AppendLine(" SCHEMA_NAME")
        _SQL.SQL.AppendLine("FROM")
        _SQL.SQL.AppendLine(" information_schema.SCHEMATA")
        _SQL.SQL.AppendLine("ORDER BY")
        _SQL.SQL.AppendLine(" SCHEMA_NAME")
        _SQL.Execute()
        While Not _SQL.Eof
            _List.Add(New TMyDatabase(Me, _SQL.FieldAsString("SCHEMA_NAME")))
            _SQL.MoveNext()
        End While
        _SQL.Close()
    End Sub

    Friend ReadOnly Property MyQuery() As TMyQuery
        Get
            Return _SQL
        End Get
    End Property

    Friend ReadOnly Property Connection() As TMySession
        Get
            Return _Conn
        End Get
    End Property

    Private disposedValue As Boolean = False        ' 重複する呼び出しを検出するには

    ' IDisposable
    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                ' TODO: 他の状態を解放します (マネージ オブジェクト)。
            End If

            ' TODO: ユーザー独自の状態を解放します (アンマネージ オブジェクト)。
            ' TODO: 大きなフィールドを null に設定します。
        End If
        Me.disposedValue = True
    End Sub

#Region " IDisposable Support "
    ' このコードは、破棄可能なパターンを正しく実装できるように Visual Basic によって追加されました。
    Public Sub Dispose() Implements IDisposable.Dispose
        ' このコードを変更しないでください。クリーンアップ コードを上の Dispose(ByVal disposing As Boolean) に記述します。
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
#End Region

End Class
